package com.wujunshen.dumpling.database.query;

import com.wujunshen.dumpling.database.metadata.IColumn;
import com.wujunshen.dumpling.database.metadata.IDatabase;
import com.wujunshen.dumpling.database.metadata.IPrimaryKey;
import com.wujunshen.dumpling.database.metadata.ITable;

import javax.sql.DataSource;
import java.util.List;

/**
 * 通用查询接口 查询数据库信息
 *
 * @author frankwoo
 */
public interface DataBaseQuery {

  /**
   * Sets data source.
   *
   * @param source the source
   */
  void setDataSource(DataSource source);

  /**
   * Gets data base type.
   *
   * @return the data base type
   */
  DataBaseType getDataBaseType();
  /**
   * 获取数据库
   *
   * @return {@link IDatabase} 数据库信息
   */
  IDatabase getDataBase();

  /**
   * 获取表信息
   *
   * @return {@link List} 所有表信息
   */
  List<? extends ITable> getTables();

  /**
   * 获取列信息
   *
   * @param table {@link String} 表名
   * @return {@link List} 表字段信息
   */
  List<? extends IColumn> getTableColumns(String table);

  /**
   * 获取所有列信息
   *
   * @return {@link List} 表字段信息
   */
  List<? extends IColumn> getAllColumns();

  /**
   * 根据表名获取主键
   *
   * @param table {@link String}
   * @return {@link List}
   */
  List<? extends IPrimaryKey> getPrimaryKeys(String table);

  /**
   * 获取主键
   *
   * @return {@link List}
   */
  List<? extends IPrimaryKey> getPrimaryKeys();
}
